package com.intretech.umsin.oss.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.intretech.umsin.oss.entity.FileType;
import com.intretech.umsin.oss.param.FileInfoParam;
import com.intretech.umsin.oss.param.UploadParam;
import com.intretech.umsin.oss.vo.FileInfoVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @version V1.0
 * @InterfaceName: FileService
 * @Description: FileService 文件服务接口.
 * @author: 李启联
 * @date: 2022-04-24 11:21
 * @Copyright: Copyright (c) 2022
 */
public interface FileService {

     FileType fileType();

    /**
     * 上传文件操作方法
     * @param file 待上传的文件
     * @param params 附加参数 如({path:'A/B';businessId:'000001'} path 服务端的存放路径(如：FTP服务端存储的分类路径,即为文件的路径前缀) ;bizId 业务ID)
     * @return 文件信息
     * @throws Exception
     */
    FileInfoVo upload(MultipartFile file, UploadParam params) throws Exception;

    /**
     * 删除文件
     * @param fileInfo
     */
    void delete(FileInfoVo fileInfo);

    /**
     * 下载文件
     * @param fileInfo
     * @return
     */
    byte[] download(FileInfoVo fileInfo) throws Exception;


    /**
     * 根据ID找到文件信息
     * @param id 文件对应的md5值作为该文件的ID标识
     * @return
     */
    FileInfoVo getById(String id);


    /**
     * 根据查询条件查询文件元信息
     * @param param 查询条件参数
     * @param pageNo 当前页码
     * @param pageSize 每页条数
     * @return 自定义分页对象
     */
    IPage<FileInfoVo> findByPageResult(FileInfoParam param, Integer pageNo, Integer pageSize);

    /**
     * 据业务ID条件得到文件列表
     * @param sBusId 业务ID
     * @return
     */
    List<FileInfoVo> findFilesByBusId(String sBusId);

    /**
     * 删除业务单下的所有文件
     * @param sBusId
     */
    void deleteByBusId(String sBusId);


}
